package pool

import (
	"fmt"
	"github.com/garyburd/redigo/redis"
	"push/global"
	"time"
)
var RedisClient *redis.Pool

//初始化redis连接池
//noreturn
func InitRedisPool() *redis.Pool{
	// 从配置文件获取redis的ip以及db
	redisCFG := global.GLOBAL_REDIS
	// 建立连接池
	RedisClient = &redis.Pool{
		// 从配置文件获取maxidle以及maxactive，取不到则用后面的默认值
		MaxIdle:     1,
		MaxActive:   0,
		Wait:        true,
		IdleTimeout: 6 * time.Second,
		Dial: func() (redis.Conn, error) {
			c, err := redis.Dial("tcp", redisCFG.Host)
			if err != nil {
				return nil, err
			}
			if _, err := c.Do("AUTH", redisCFG.Pwd); err != nil {
				fmt.Println(err)
			}
			// 选择db
			c.Do("SELECT", redisCFG.DB)
			return c, nil
		},
	}
	return RedisClient
}
//获取连接池链接
//return redis.conn
func GetRedisPoolConn(RedisClient *redis.Pool) redis.Conn{
	c := RedisClient.Get()
	return c
}


//redis初始化单个链接并返回此链接
func RedisConn() redis.Conn{
	redisCFG := global.GLOBAL_REDIS
	c, err := redis.Dial("tcp", redisCFG.Host)
	if err != nil {
		fmt.Println(err)
	}
	if _, err := c.Do("AUTH", redisCFG.Pwd); err != nil {
		fmt.Println(err)
	}
	if _, err := c.Do("SELECT", redisCFG.DB); err != nil {
		//c.Close()
		fmt.Println(err)
	}
	//conn = c
	return c
}

//redis关闭链接
func RedisConnClose(conn redis.Conn){
	defer conn.Close()
}




//-------------------------------redis-LIST-Table----------------------------------------
//llen操作
func RedisLLen(conn redis.Conn,key string) int{
	v, err := redis.Int(conn.Do("LLEN", key))
	if err != nil {
		fmt.Println(err)
	}
	return v
}

//get操作
func RedisGet(conn redis.Conn,key string){
	if _, err := conn.Do("GET", key); err != nil {
		fmt.Println(err)
	}
}









//set操作
//@param key,value
func RedisSet(conn redis.Conn,key string,value int){
	if _, err := conn.Do("SET", key,value); err != nil {
		fmt.Println(err)
	}
}

//lpush操作
//@param key,value
func RedisLpush(conn redis.Conn,key string,value int){
	if _, err := conn.Do("lpush", key,value); err != nil {
		fmt.Println(err)
	}
}
